package IO.统计文件夹大小;

import java.io.File;

/**
 * @author: wh(1835734390 @ qq.com)
 * @date: 2023/3/27 17:02
 * @description:
 * @version:
 */
public class RecursionFileSize {
    /**
     * @param args
     */
    public static void main(String[] args) {

        File file = new File("D:\\tmp");
        long startTime = System.currentTimeMillis();
        System.out.println(file.getName() + " total size is "
                + getFileSize(file) / 1024 / 1024);
        System.out.println("getFileSize cost time is "
                + (System.currentTimeMillis() - startTime));
    }

    /**
     * 1、首先判断 是否为文件，如果是 直接返回 文件所占空间 2、如果不是，则列举文件下所有文件，将这些文件所占空间想加，得到文件夹大小
     * 3、递归所有文件夹
     *单位： M
     * @param file
     * @return
     */
    public static long getFileSize(File file) {
        if (file.isFile()) {
            return file.length();
        } else {
            long filesSize = 0l;
            File[] files = file.listFiles();
            if (files == null) { // null if security restricted
                return 0l;
            }
            for (File fi : files) {
                filesSize = filesSize + getFileSize(fi);
            }
            return filesSize;
        }
    }
}
